#ifndef FRAMEELECCIONTABLA_H_
#define FRAMEELECCIONTABLA_H_

#include <gtkmm.h>
#include <iostream>
#include "GestorArchivoConfiguracion.h"
#include "Columnas.h"

typedef Glib::RefPtr<Gtk::ListStore> refListore;

class FrameDeEleccionDeFiltros;

class FrameEleccionTabla:public Gtk::Frame {
private:
	GestorArchivoConfiguracion &gestorConfigHechos;
	std::string tablaElegida;
	std::map<std::string, std::string> numerosT;	// nombreTabla-numeroTabla
	std::vector<std::string> nombresGraficos;

	std::vector<std::string> elegidosHechos;
	std::string elegidoDimension;
	std::string graficoElegido;
	FrameDeEleccionDeFiltros* frameFiltros;

protected:
	Gtk::VBox cajaVertical;
	Gtk::HBox cajaHorizontal;
	Gtk::VBox cajaVdeHorizontal;
	Gtk::HBox cajaHGrafico;
	Gtk::VBox cajaVerticalGrafico;
	Gtk::Label tituloTabla;
	Gtk::HBox cajaHTituloTabla;
	Gtk::Label labelTorta;
	Gtk::Label labelBarra;
	Gtk::Label tituloGrafico;
	Gtk::HBox cajaHTituloGrafico;

	Gtk::Label nota;

	Gtk::ScrolledWindow ventanaDeslizableArchivos;
	ModeloDeColumnasU columnasArchivos;
	Gtk::TreeView visorModeloArbolArchivos;
	refListore referenciaModeloArchivos;

	Gtk::ScrolledWindow ventanaDeslizableHechos;
	ModeloDeColumnasU columnasHechos;
	Gtk::TreeView visorModeloArbolHechos;
	refListore referenciaModeloHechos;

	Gtk::ScrolledWindow ventanaDeslizableDimensiones;
	ModeloDeColumnasU columnasDimensiones;
	Gtk::TreeView visorModeloArbolDimensiones;
	refListore referenciaModeloDimensiones;

	Gtk::ScrolledWindow ventanaDeslizableGraficos;
	ModeloDeColumnasG columnasGraficos;
	Gtk::TreeView visorModeloArbolGraficos;
	refListore referenciaModeloGraficos;

	void on_manejador_cambios_tabla();
	void on_manejador_cambios_tabla_Dimension();
	void on_manejador_cambios_tabla_Hecho();
	void on_multiple_seleccion_hechos(const Gtk::TreeModel::iterator& iter);
	void on_seleccion_grafico();

	/*
	void onB();
	Gtk::Button boton;
*/

public:
	FrameEleccionTabla(GestorArchivoConfiguracion& gestor);
	virtual ~FrameEleccionTabla();
	void setFrameFiltro(FrameDeEleccionDeFiltros* frame);

	bool eleccionCompleta();
	void getGraficoElegido(std::string& grafico);
	void getDatosTablaElegida(std::string &numeroTabla, std::string &nombreTabla);


private:
	void setNombresDatosGraficos();
	void setValorColumnaGrafico(const char* grafico, const std::string &nombre);
	void inicializarVentanasDeslizables();
	void agregarValorADimensiones(std::string &dato);
	void agregarValorAHechos(std::string &dato);
	void setDatosDeTablas();
	void conectarManejadoresDeEvento();

	std::string filtrarFecha(std::string& fecha);
	void limpiarElegidos();

};



#endif /* FRAMEELECCIONTABLA_H_ */
